﻿using System;
using System.Diagnostics;
using System.Text;

namespace umodelGUILE
{
    /// <summary>
    /// 명령 프롬프트 프로그램 백그라운드 실행
    /// </summary>
    class Cmd
    {
        private ProcessStartInfo mCmd;
        private Process mProcess;
        private string mCommand;

        /// <summary>
        /// 생성자
        /// </summary>
        /// <param name="command">실행할 프로그램의 파일 이름</param>
        public Cmd(string command)
        {
            mCmd = new ProcessStartInfo();
            mProcess = new Process();
            mCommand = command;
        }

        /// <summary>
        /// 프로그램 실행
        /// </summary>
        /// <param name="option">Arguments</param>
        /// <returns></returns>
        public StringBuilder StartCommand(string option)
        {
            mCmd.FileName = mCommand;
            mCmd.Arguments = option;
            mCmd.WindowStyle = ProcessWindowStyle.Hidden;   // cmd창 숨기기
            mCmd.CreateNoWindow = true;                     // cmd창 생성하지 않음
            mCmd.UseShellExecute = false;
            mCmd.RedirectStandardOutput = true;             // cmd창에서 데이터 가져오기
            mCmd.RedirectStandardInput = true;              // cmd창으로 데이터 보내기
            mCmd.RedirectStandardError = true;              // cmd창에서 오류 내용 가져오기

            mProcess.EnableRaisingEvents = false;
            mProcess.StartInfo = mCmd;
            mProcess.Start();
            mProcess.StandardInput.Close();

            string result = mProcess.StandardOutput.ReadToEnd();
            StringBuilder sb = new StringBuilder();
            sb.Append(result);
            sb.Append("\r\n");

            mProcess.WaitForExit();
            mProcess.Close();

            return sb;
        }
    }
}
